题目来源于:牛客题霸 - SQL 进阶挑战
增删改操作SQL 插入记录的方式汇总:
普通插入(全字段) :INSERT INTO table_name VALUES (value1, value2, ...)普通插入(限定字段) :INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)多条一次性插入 :INSERT INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...), (value2_1, value2_2, ...), ...从另一个表导入 :INSERT INTO table_name SELECT * FROM table_name2 [WHERE key=value]带更新的插入 :REPLACE INTO table_name VALUES (value1, value2, ...)(注意这种原理是检测到主键或唯一性索引键重复就删除原记录后重新插入)插入记录(一)描述:牛客后台会记录每个用户的试卷作答记录到 exam_record 表,现在有两个用户的作答记录详情如下:
用户 1001 在 2021 年 9 月 1 日晚上 10 点 11 分 12 秒开始作答试卷 9001,并在 50 分钟后提交,得了 90 分;用户 1002 在 2021 年 9 月 4 日上午 7 点 1 分 2 秒开始作答试卷 9002,并在 10 分钟后退出了平台。试卷作答记录表exam_record中,表已建好,其结构如下,请用一条语句将这两条记录插入表中。
FiledTypeNullKeyExtraDefaultCommentidint(11)NOPRIauto_increment(NULL)自增 IDuidint(11)NO(NULL)用户 IDexam_idint(11)NO(NULL)试卷 IDstart_timedatetimeNO(NULL)开始时间submit_timedatetimeYES(NULL)提交时间scoretinyint(4)YES(NULL)得分答案:
// 存在自增主键,无需手动赋值INSERT INTO exam_record (uid, exam_id, start_time, submit_time, score) VALUES(1001, 9001, '2021-09-01 22:11:12', '2021-09-01 23:01:12', 90),(1002, 9002, '2021-09-04 07:01:02', NULL, NULL);插入记录(二)描述:现有一张试卷作答记录表exam_record,结构如下表,其中包含多年来的用户作答试卷记录,由于数据越来越多,维护难度越来越大,需要对数据表内容做精简,历史数据做备份。
表exam_record:
FiledTypeNullKeyExtraDefaultCommentidint(11)NOPRIauto_increment(NULL)自增 IDuidint(11)NO(NULL)用户 IDexam_idint(11)NO(NULL)试卷 IDstart_timedatetimeNO(NULL)开始时间submit_timedatetimeYES(NULL)提交时间scoretinyint(4)YES(NULL)得分我们已经创建了一张新表exam_record_before_2021用来备份 2021 年之前的试题作答记录,结构和exam_record表一致,请将 2021 年之前的已完成了的试题作答纪录导入到该表。
答案:
INSERT INTO exam_record_before_2021 (uid, exam_id, start_time, submit_time, score)SELECT uid,exam_id,start_time,submit_time,scoreFROM exam_recordWHERE YEAR(submit_time)